//package demo;
//
//import java.beans.PropertyDescriptor;
//import java.util.HashMap;
//import java.util.HashSet;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//import java.util.Map.Entry;
//import java.util.Set;
//
//import org.springframework.beans.BeanUtils;
//
//import com.surekam.survey.entity.User;
//
//public class RowsDmeo<T> {
//
//	/** The class we are mapping to */
//	private Class<T> mappedClass;
//
//	/** Map of the fields we provide mapping for */
//	private Map<String, PropertyDescriptor> mappedFields;
//
//	/** Set of bean properties we provide mapping for */
//	private Set<String> mappedProperties;
//
//	public Class<T> getMappedClass() {
//		return mappedClass;
//	}
//
//	public void setMappedClass(Class<T> mappedClass) {
//		this.mappedClass = mappedClass;
//	}
//
//	public Map<String, PropertyDescriptor> getMappedFields() {
//		return mappedFields;
//	}
//
//	public void setMappedFields(Map<String, PropertyDescriptor> mappedFields) {
//		this.mappedFields = mappedFields;
//	}
//
//	public Set<String> getMappedProperties() {
//		return mappedProperties;
//	}
//
//	public void setMappedProperties(Set<String> mappedProperties) {
//		this.mappedProperties = mappedProperties;
//	}
//
//	public static void main(String[] args) {
//		RowsDmeo<User> demo = new RowsDmeo<User>();
//		demo.initialize(User.class);
//		Set<Entry<String, PropertyDescriptor>> entrySet = demo.getMappedFields().entrySet();
//		for (Entry<String, PropertyDescriptor> entry : entrySet) {
//			System.out.println(entry.getKey() + "\t" + entry.getValue());
//		}
//
//		Iterator<String> list = demo.getMappedProperties().iterator();
//
//		while (list.hasNext()) {
//			System.out.println(list.next());
//		}
//		
//	}
//
//	public void initialize(Class<T> mappedClass) {
//		this.mappedFields = new HashMap<String, PropertyDescriptor>();
//		this.mappedProperties = new HashSet<String>();
//		setMappedClass(mappedClass);
//		
//
//		PropertyDescriptor[] pds = BeanUtils.getPropertyDescriptors(getMappedClass());
//		for (PropertyDescriptor pd : pds) {
//			if (pd.getWriteMethod() != null) {
//				this.mappedFields.put(pd.getName().toLowerCase(), pd);
//				String underscoredName = underscoreName(pd.getName());
//				if (!pd.getName().toLowerCase().equals(underscoredName)) {
//					this.mappedFields.put(underscoredName, pd);
//				}
//				this.mappedProperties.add(pd.getName());
//			}
//		}
//	}
//
//	/**
//	 * Convert a name in camelCase to an underscored name in lower case. Any upper case letters are converted to lower
//	 * case with a preceding underscore.
//	 * 
//	 * @param name
//	 *            the string containing original name
//	 * @return the converted name
//	 */
//	private String underscoreName(String name) {
//		StringBuilder result = new StringBuilder();
//		if (name != null && name.length() > 0) {
//			result.append(name.substring(0, 1).toLowerCase());
//			for (int i = 1; i < name.length(); i++) {
//				String s = name.substring(i, i + 1);
//				if (s.equals(s.toUpperCase())) {
//					result.append("_");
//					result.append(s.toLowerCase());
//				} else {
//					result.append(s);
//				}
//			}
//		}
//		return result.toString();
//	}
//}
